package com.zm.test;

import com.zm.dao.IUserDao;
import com.zm.domain.QueryVo;
import com.zm.domain.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest1 {
    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;

    @Before //用于在测试方法之前执行
    public void init() throws IOException {
        //1.读取配置文件，生成字节输入流
        in= Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory\
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSession对象
        sqlSession=factory.openSession();
        //4.获取代理对象
        userDao=sqlSession.getMapper(IUserDao.class);
    }
    @After //用于在测试方法之后执行
    public  void destroy() throws IOException {
        sqlSession.close();
        in.close();
    }

    /**
     * 查询所有用户信息
     */
    @Test
    public void testFindAll() {
        List<User> users=userDao.findAll();
        for (User user : users){
            System.out.println(user);
        }

    }

    /**
     * 保存（添加）用户信息
     */
    @Test
    public  void testSaveUser(){
        User user=new User();
        user.setUsername("张男");
        user.setSex("女");
        user.setAge(37);
        System.out.println("保存之前"+user);
        //执行方法
        userDao.saveUser(user);
        System.out.println("保存之后"+user);

       /* User user1=new User();
        user1.setUsername("高扬胜");
        user1.setSex("男");
        user1.setAge(24);
        //执行方法
        userDao.saveUser(user1);

        User user2=new User();
        user2.setUsername("徐欢");
        user2.setSex("男");
        user2.setAge(21);
        //执行方法
        userDao.saveUser(user2);

        User user3=new User();
        user3.setUsername("康伟");
        user3.setSex("男");
        user3.setAge(22);
        //执行方法
        userDao.saveUser(user3);

        User user4=new User();
        user4.setUsername("王思帆");
        user4.setSex("男");
        user4.setAge(22);
        //执行方法
        userDao.saveUser(user4);

        User user5=new User();
        user5.setUsername("宗文芸");
        user5.setSex("女");
        user5.setAge(22);
        //执行方法
        userDao.saveUser(user5);*/
        //事务提交
        sqlSession.commit();
    }

    /**
     * 更新（修改）用户信息
     */
    @Test
    public void testUpdateUser(){
        User user=new User();
        user.setId(13);
        user.setUsername("张猛");
        user.setSex("男");
        user.setAge(18);
        //执行方法
        userDao.updateUser(user);
        sqlSession.commit();

    }

    /**
     * 根据id删除用户信息
     */
    @Test
    public void testDeleteUser(){
        //执行方法
        userDao.deleteUser(13);
        sqlSession.commit();
    }
    /**
     * 根据id查询用户
     */
    @Test
    public void testFindOne(){
        User user =  userDao.findById(25);
        System.out.println(user);
    }

    /**
     * 根据username模糊查询
     */
    @Test
    public void testFindByName(){
         List<User> users=userDao.findByName("%猛%");
        //     List<User> users=userDao.findByName("猛");
        for (User user : users){
            System.out.println(user);
        }

    }

    /**
     * 查询用户总数
     */
    @Test
    public void testFindTotal(){
        int count =userDao.findTotal();
        System.out.println("共"+count+"个用户");
    }


    /**
     * 测试queryVo作为查询条件模糊查询
     */
    @Test
    public void testFindByVo(){
        QueryVo vo=new QueryVo();
        User user=new User();
        user.setUsername("%张%");
        vo.setUser(user);
        List<User> users=userDao.findByVo(vo);

        for (User u : users){
            System.out.println(u);
        }

    }

}
